package ltd.hanamaki.unittest.testng.parameter;

import ltd.hanamaki.unittest.testng.parameter.unit.DruidUtil;
import ltd.hanamaki.unittest.testng.parameter.unit.FileUtil;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * 1. 首先搭建一个测试类 保证能够正常运行
 * 2. 编写 测试 数据 二维数组 测试数据所在的数据源 需要使用注解 来实现
 **/
public class JavaSourcesTestNG {

    static JavaSources javaSources;

    /**
     * 初始化测试类
     */
    @BeforeMethod
    public void setUp() {
        javaSources = new JavaSources();
    }

    /* 编写 需要执行的测试方法 */
    /* 在一个测试方法上 想要使用数据源中的数据 需要引入数据源 */
    /* 引入数据源之后，需要在测试方法的形参中定义数据类型、数据个数相同的形参列表来接收数据源中的数据 */
    @Test(dataProvider = "dp3")
    public void t(String a, String b, String exp) {
        int add = javaSources.add(Integer.parseInt(a), Integer.parseInt(b));
        Assert.assertEquals(add, Integer.parseInt(exp));
    }

    /**
     * 这个 dp1 方法是一个 测试的数据源  dp1 是数据源的名称
     * @return
     */
    @DataProvider
    public Object[][] dp1() {
        return new Object[][]{
                new Object[]{"2", "3", "5"},
                new Object[]{"3", "3", "6"},
                new Object[]{"9", "3", "11"},
                new Object[]{"7", "3", "10"}
        };
    }

    @DataProvider
    public Object[][] dp2() {
        Object[][] logins = DruidUtil.getSqlContent("login", new String[]{"expr_a", "expr_b", "expr_exp"});
        return logins;
    }

    @DataProvider
    public Object[][] dp3() {
        return FileUtil.getFileContent("src/ltd/hanamaki/unittest/testng/parameter/testData.csv");
    }

}
